using System;

namespace LannyPractiseCode
{
    public class Queen8
    {
        public int Max{set;get;}
        public int Count{set;get;}
        int[] array=new int[8];

        public void BeginFind(int n)
        {
            if(n==8)
            {
                Print();
                return;
            }
            //依次放入皇后，并判断是否冲突
            for(int i=0;i<8;i++)
            {
                //先把当前这个皇后n，放到改行的第1列
                array[n]=i;
                if(Judge(n))//不冲突
                {
                    //接着放n+1个皇后，即开始递归
                    BeginFind(n+1);
                }
                //如果冲突，就继续执行array[n]=i,放置在本行的后移的一个位置
            }
        }

        //说明
        //1. array[i] == array[n]表示判断 第n个皇后是否和前面的n-1个皇后在同一列
        //2. Math.abs(n-i) == Math. abs(array[n] - array[i]) 表示判断第n个皇后是否和第i皇后是否在同一斜线
        //n=1放置第2列1 n = 1 array[1] = 1
        // Math.abs(1-0) == 1 Math. abs(array[n] - array[i]) = Math.abs(1-0) = 1
        //3.判断是否在同一行，没有必要，n每次都在递增
        private bool Judge(int n)
        {
            Count++;
            for(int i=0;i<n;i++)
            {
                if(array[i]==array[n] || Math.Abs(n-i)==Math.Abs(array[n]-array[i]))
                    return false;
            }
            return true;
        }
        private void Print()
        {
            Count++;
            for(int i=0;i<array.Length;i++)
            {
                System.Console.Write(array[i]+" ");
            }
            System.Console.WriteLine("");
        }
    }
    
}